package com.vt.statusmanager.data;

import java.util.ArrayList;
import java.util.List;
import com.vt.statusmanager.Preconditions;

/**
 * Класс для хранения полученных из экселя данных на одного менеджера
 * 
 * @author Vit
 * 
 */
public class Manager {
	/**
	 * Фамилия менеджера
	 */
	private String secondName;
	/**
	 * Путь до понедельного отчета менеджера
	 */
	private String pathToExelFile;
	/**
	 * Коллекция с неделями, проработанные данным менеджером
	 */
	private final List<WeekRecord> weekRecords = new ArrayList<WeekRecord>();

	/**
	 * Получить элемент коллекции с неделями по номеру недели
	 * 
	 * @param numberWeek Номер недели
	 * 
	 */
	public WeekRecord getWeekRecord(int numberWeek) {
		for (WeekRecord weekRecord : weekRecords) {
			if ((weekRecord.getNamberWeek() == numberWeek)) {
				return weekRecord;
			}
		}
		return null;
	}

	/**
	 * Добавить в коллекцию данные одной позиции из экселя
	 * 
	 * @param numberWeek Номер недели в году
	 * @param content Содержание
	 * @param resultData Отметка о выполнении
	 * @param comments Приложение
	 */
	public void setWeekRecord(int numberWeek, String content, String resultData, String comments) {
		Preconditions.notNull(numberWeek,content, resultData,comments);
		weekRecords.add(new WeekRecord(numberWeek, content, resultData, comments));
	}

	/**
	 * Простой конструктор
	 */
	Manager() {
	}

	/**
	 * Конструктор с заданием фамилии менеджера и пути к его эксель файлу
	 * 
	 * @param secondName Фамилия менеджера
	 * @param path Путь к эксель файлу
	 */
	Manager(String secondName, String path) {
		Preconditions.notNull(secondName,path);
		Preconditions.notBlank(secondName, path);
		if ((this.secondName == null) || (this.pathToExelFile == null)) {
			this.secondName = secondName;
			this.pathToExelFile = path;
		}
	}

	/**
	 * Вернуть фамилию менеджера
	 * 
	 */
	public String getSecondName() {
		return secondName;
	}

	/**
	 * Вернуть путь к эксель файлу
	 */
	public String getPathToFile() {
		return pathToExelFile;
	}

	/**
	 * Вернуть количество записей у данного менеджера
	 * 
	 */
	public int getNumberOfRecords() {
		if (weekRecords.isEmpty()) {
			return 0;
		}
		return weekRecords.size();
	}

	/**
	 * Возвращает самую первую запись из недельного отчета менеджера
	 * 
	 * @return Объект первой записи, либо null, если коллекция пуста или отчет пуст
	 */
	public WeekRecord getFurstRecord() {
		if (!weekRecords.isEmpty()) {
			int furstRecord = 0;
			for (WeekRecord record : weekRecords) {
				if (furstRecord == 0) {
					furstRecord = record.getNamberWeek();
				}
				if (furstRecord >= record.getNamberWeek()) {
					furstRecord = record.getNamberWeek();
				}
			}
			return this.getWeekRecord(furstRecord);
		}
		return null;
	}
}
